#!/bin/bash
# Speech Convert FastAPI 启动脚本

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 默认配置
DEFAULT_HOST="0.0.0.0"
DEFAULT_PORT="8000"
DEFAULT_FUNASR_PORT="10096"
DEFAULT_LOG_LEVEL="info"
DEFAULT_RELOAD="false"

# 显示帮助信息
show_help() {
    echo -e "${BLUE}FastAPI 应用启动脚本${NC}"
    echo ""
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  -h, --host HOST        服务器主机地址 (默认: $DEFAULT_HOST)"
    echo "  -p, --port PORT        服务器端口 (默认: $DEFAULT_PORT)"
    echo "  -f, --funasr-port PORT 语音识别服务端口 (默认: $DEFAULT_FUNASR_PORT)"
    echo "  -l, --log-level LEVEL  日志级别 (默认: $DEFAULT_LOG_LEVEL)"
    echo "  -r, --reload           启用热重载 (开发模式)"
    echo "  --help                 显示此帮助信息"
    echo ""
    echo "示例:"
    echo "  $0                                    # 使用默认配置启动"
    echo "  $0 -h 0.0.0.0 -p 8000                # 指定主机和端口"
    echo "  $0 -r -l debug                       # 开发模式，调试日志"
    echo ""
}

# 解析命令行参数
HOST=$DEFAULT_HOST
PORT=$DEFAULT_PORT
FUNASR_PORT=$DEFAULT_FUNASR_PORT
LOG_LEVEL=$DEFAULT_LOG_LEVEL
RELOAD=$DEFAULT_RELOAD

while [[ $# -gt 0 ]]; do
    case $1 in
        -h|--host)
            HOST="$2"
            shift 2
            ;;
        -p|--port)
            PORT="$2"
            shift 2
            ;;
        -f|--funasr-port)
            FUNASR_PORT="$2"
            shift 2
            ;;
        -l|--log-level)
            LOG_LEVEL="$2"
            shift 2
            ;;
        -r|--reload)
            RELOAD="true"
            shift
            ;;
        --help)
            show_help
            exit 0
            ;;
        *)
            echo -e "${RED}错误: 未知参数 $1${NC}"
            show_help
            exit 1
            ;;
    esac
done

# 检查端口是否被占用
check_port() {
    if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null ; then
        echo -e "${YELLOW}警告: 端口 $PORT 已被占用${NC}"
        echo -e "${YELLOW}请选择其他端口或停止占用该端口的进程${NC}"
        exit 1
    fi
}

# 显示启动信息
show_startup_info() {
    echo -e "${GREEN}🚀 启动 FastAPI 应用${NC}"
    echo -e "${BLUE}主机:${NC} $HOST"
    echo -e "${BLUE}端口:${NC} $PORT"
    echo -e "${BLUE}日志级别:${NC} $LOG_LEVEL"
    echo -e "${BLUE}热重载:${NC} $RELOAD"
    echo ""
    echo -e "${GREEN}访问地址:${NC}"
    echo -e "  📚 API 文档: ${BLUE}http://$HOST:$PORT/docs${NC}"
    echo -e "  💚 健康检查: ${BLUE}http://$HOST:$PORT/health${NC}"
    echo -e "  🏠 根路径: ${BLUE}http://$HOST:$PORT/${NC}"
    echo -e "  🔌 WebSocket: ${BLUE}ws://$HOST:$FUNASR_PORT${NC}"
    echo ""
}

# 主函数
main() {
    # 检查端口
    check_port

    # 构建启动参数
    ARGS=(
        "--host" "$HOST"
        "--port" "$PORT"
    )

    # 添加热重载参数
    if [ "$RELOAD" = "true" ]; then
        ARGS+=("--reload")
        echo -e "${YELLOW}🔧 开发模式已启用 (热重载)${NC}"
    fi

    # 设置环境变量
    export PYTHONPATH="$PWD/src"
    export MODELSCOPE_LOGGING_LEVEL="ERROR"
    export FUNASR_LOGGING_LEVEL="ERROR"

    echo -e "${GREEN}✅ 环境变量已设置${NC}"
    echo -e "${GREEN}🎯 启动命令: uv run python -m speech_convert.main ${ARGS[*]}${NC}"
    echo -e "${GREEN}🎯 启动命令: python -m speech_convert.server.funasr_wss_server --host $HOST --port $FUNASR_PORT${NC}"
    echo ""

    # 启动应用
    echo -e "${GREEN}⏳ 正在启动应用...${NC}"
    echo ""

    echo "⚡️ 启动 FastAPI 服务... "
    echo ""

    echo "🚀 启动 Speech Convert 服务... "

    # ... 启动服务 ...
    uv run python -m speech_convert.main "${ARGS[@]}" &
    PID1=$!
    uv run python -m speech_convert.server.funasr_wss_server --host $HOST --port $FUNASR_PORT &
    PID2=$!
    wait
}

# 捕获 Ctrl+C
trap 'echo -e "\n${YELLOW}⚠️ 收到中断信号，正在停止...${NC}"; kill $PID1 $PID2 2>/dev/null; exit 0' INT

# 运行主函数
main "$@"
